package com.charging.service;
import com.charging.entity.ChargingRecord;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface RecordService {
    /**
     * 根据ID获取充电记录
     * @param id 记录ID
     * @return 充电记录实体
     */
    ChargingRecord getRecordById(Integer id);

    /**
     * 获取所有充电记录列表
     * @return 充电记录列表
     */
    List<ChargingRecord> getAllRecords();

    /**
     * 添加充电记录
     * @param record 充电记录实体
     * @return 是否添加成功
     */
    boolean addRecord(ChargingRecord record);

    /**
     * 更新充电记录信息
     * @param record 充电记录实体
     * @return 是否更新成功
     */
    boolean updateRecord(ChargingRecord record);

    /**
     * 删除充电记录
     * @param id 记录ID
     * @return 是否删除成功
     */
    boolean deleteRecord(Integer id);

    /**
     * 分页查询充电记录
     * @param page 页码
     * @param pageSize 每页大小
     * @return 分页记录列表
     */
    List<ChargingRecord> findRecordsByPage(int page, int pageSize);

    /**
     * 获取充电记录总数
     * @return 记录总数
     */
    int findRecordCount();

    /**
     * 获取用户充电记录
     * @param userId 用户ID
     * @return 用户充电记录列表
     */
    List<ChargingRecord> getRecordsByUser(Integer userId);

    /**
     * 开始充电
     * @param userId 用户ID
     * @param pileId 充电桩ID
     * @return 是否开始成功
     */
    boolean startCharging(Integer userId, Integer pileId);

    /**
     * 结束充电
     * @param recordId 记录ID
     * @return 是否结束成功
     */
    boolean stopCharging(Integer recordId);

    /**
     * 计算充电费用
     * @param recordId 记录ID
     * @return 充电费用
     */
    BigDecimal calculateFee(Integer recordId);

    /**
     * 获取充电桩的充电记录
     * @param pileId 充电桩ID
     * @return 充电桩记录列表
     */
    List<ChargingRecord> getRecordsByPile(Integer pileId);

    /**
     * 获取最近一周的充电统计
     * @return 按日期分组的充电记录统计
     */
    Map<String, Integer> getWeeklyRecordStats();

    long findRecordEnergyCount();
}